#include "..\CookHeader.h"

Array <string> dataAry = { "ٳ", "ĵĿ", "佺", "ö", "ټ", "īݶ", "ﰢ" };

int binSearch(Array <string> ary, string fData) {
	int pos = -1;
	int start = 0;
	int end = len(ary) - 1;

	while (start <= end) {
		int mid = (start + end) / 2;
		if (fData == ary[mid])
			return mid;
		else if (fData > ary[mid])
			start = mid + 1;
		else
			end = end - 1;
	}
	return pos;
}

int main() {
	Array <string> sellAry;			//  Ǹŵ ǰ 迭
	Array <string> sellProduct;		// ߺ ŵ ǰ 迭

	randomInit(0, len(dataAry)-1);	// dataAry ε ȣ ʱȭ
	for (int i = 0; i < 20; i++) {
		int num = cookRandom(gen);	// dataAry ߿ ϳ 
		sellAry.push_back(dataAry[num]);
	}
	print("# Ǹŵ ü (ߺO, X) -->");
	printArray(sellAry);
	println("");
	sortArray(sellAry);					// 
	print("# Ǹŵ ü (ߺO, O) -->");
	printArray(sellAry);
	println("");
	copyArray(sellAry, sellProduct);	// 
	setArray(sellProduct);				// ߺ 
	print("# Ǹŵ ü ǰ (ߺX) -->");
	printArray(sellProduct);
	println("");

	Array <Array <string>> countAry;	// { {ǰ, }, {ǰ, } .... }
	for (int i = 0; i < len(sellProduct); i++) {
		string product = sellProduct[i];
		int count = 0;
		int pos = 0;
		while (pos != -1) {
			pos = binSearch(sellAry, product);
			if (pos != -1) {
				count++;
				del(sellAry, pos);
			}			
		}
		countAry.push_back({ product, to_string(count) });
	}

	print("  ==>");
	printArray2(countAry);
}